# coding utf-8

import traceback

''''''
'''
格式：

try:
    可能发生异常的代码
except:
    处理异常的代码
else:
    没有发生异常，except不满足执行else
finally:
    不管有没有异常，最终都要执行
    
'''
_file = None
try:
    _file = open('abc.jpg', 'w')
    # 前面只写方式打开文件，不能读文件，产生异常
    _data = _file.read()
    print(_data)
except Exception as e:
    print('捕获异常：', e)
finally:
    print('关闭文件')
    _file.close()


# 外部捕获异常
try:
    _file = open('abc.jpg', 'w')
    # 内部语句执行完，才向外部传递异常
    try:
        # 内部没有捕获处理异常
        _data = _file.read()
        print(_data)
    finally:
        print('关闭文件')
        _file.close()
except Exception as e:
    # traceback.print_exc()
    print('外层捕获异常：', e)

# 自定义异常类
class CustomException(Exception):
    # 初始化类
    def __init__(self,_msg):
        # 调用父类的init，做父类的初始化工作
        super().__init__()
        # ------ 自定义代码 ------ #

    # 重写__str__()，返回提示信息
    def __str__(self):
        return f'出现了异常···········'


# 抛出异常
raise CustomException("异常信息")